package com.dhj.jvmstudy.chapter04;

/**
 * 面试题：
 *      方法中定义的局部变量是否线程安全，具体情况具体分析。
 * 何为线程安全？
 *      如果只有一个线程才可以操作此数据，则必是线程安全的。
 *      如果有多个线程操作此数据，则此数据是共享数据。如果不考虑同步机制的话。会存在线程安全问题。
 */
public class StringBuilderTest {

    // s1的声明方式是线程安全的
    public static void method1(){
        // StringBuilder线程不安全
        StringBuilder s1 = new StringBuilder();
        s1.append("a");
        s1.append("b");
    }

    // str的操作过程是线程不安全的
    public static void method2(StringBuilder str){
        str.append("a");
        str.append("b");
    }

    // s1的操作是线程不安全的
    public static StringBuilder method3(){
        StringBuilder s1 = new StringBuilder();
        s1.append("a");
        s1.append("b");
        return s1;
    }

    // s1的操作是线程安全的
    public static String method4(){
        StringBuilder s1 = new StringBuilder();
        s1.append("a");
        s1.append("b");
        return s1.toString();
    }

    public static void main(String[] args) {
        StringBuilder s = new StringBuilder();

        new Thread(()->{
            s.append("a");
            s.append("b");
        }).start();

        method2(s);
    }
}
